$(function () {

    layui.use(['form', 'layer', 'element'], function () {
        var form = layui.form(),
            layer = layui.layer,
            element = layui.element(),
            attachments = [],
            form_data;

        // 自定义验证规则
        form.verify({
            // 金额验证：整数兼保留两位小数
            money: function money(value, item) {
                if (value && !/^[1-9](\d+)?(\.\d{1,2})?$/.test(value)) {
                    return '请输入正确的金额';
                }
            },
            km: function km(value, item) {
                if (value && !/^\d+$/.test(value)) {
                    return '只能输入整数';
                }
            },
            mynumber: function (value, item) {
                if (value && !/^\d+$/.test(value)) {
                    return '只能输入整数';
                }
            }
        });

        // 提交
        form.on('submit(submit)', function (data) {
            form_data = data.field;
            // 如果队列里存在附件则进行上传，没有则忽略
            if (FileUploader.getFiles().length) {
                FileUploader.upload();
            } else {
                layer.load(2, {
                    shade: [0.5, '#fff'] //0.1透明度的白色背景
                });
                submitFormData(data.field);
            }
        });

        // 检查用户是否选择了审核人
        function checkReviewers(data) {
            var count = 0,
                msg = '审批人不能为空';
            for (var k in data) {
                if (/^reviewers\[\]$/.test(k)) {
                    count = 0;
                    msg = '请检查审批人是否选择';
                    break;
                } else {
                    if (/^reviewers\[\d+\]$/.test(k)) {
                        count++;
                    }
                }
            }

            return count > 0 ? true : msg;
        }

        function checkCC(data) {
            var count = 0;

            for (var k in data) {
                if (/^cc\[\d+\]$/.test(k)) {
                    count++;
                }
            }

            return count;
        }

        // 提交表单数据
        function submitFormData(data) {
            // 检查审批人是否为空
            var res = checkReviewers(data);
            if (typeof res == 'string') {
                layer.closeAll();
                layer.msg(res, {
                    icon: 5,
                    time: 3000
                });
                return;
            }
            // 抄送人未选取弹出confirm
            if (typeof isCCRule != 'undefined' && isCCRule === true && checkCC(data) == 0) {
                layer.confirm('规则要求选择抄送人，确定不需要选择吗？', {
                    btn: ['确定', '取消']
                }, function () {
                    submitCommon(data);
                });
            } else {
                submitCommon(data);
            }
        }

        function submitCommon(data) {
            $.post('/approval/newStore', data, function (response) {
                if (response.errno) {
                    layer.closeAll();
                    layer.msg(response.message, {
                        icon: 2,
                        time: 2000
                    });
                } else {
                    location.href = '/approval/show?id=' + response.data.id;
                }
            }, 'json');
        }

        // 定义 webuploader 配置
        var WebUploaderOptions = {
            auto: false,
            server: '/Approval/upload',
            pick: {
                id: '#FilePick',
                multiple: true
            },
            fileVal: 'Filedata',
            accept: {
                title: 'file',
                extensions: 'zip,rar,jpg,png,jpeg,doc,docx,xls,xlsx,pdf,ppt,pptx'
            },
            method: 'POST'
        };

        // 实例化uploader
        var FileUploader = WebUploader.create(WebUploaderOptions);

        // 上传错误时
        FileUploader.on('error', function (code) {
            var msg = '';
            switch (code) {
                case 'Q_EXCEED_NUM_LIMIT':
                    msg = '只能上传一个文件';
                    break;
                case 'Q_EXCEED_SIZE_LIMIT':
                    msg = '文件大小超出限制';
                    break;
                case 'Q_TYPE_DENIED':
                    msg = '文件格式不允许';
                    break;
                case 'F_DUPLICATE':
                    msg = '文件已存在';
                    break;
                default:
                    msg = code;
            }
            layer.msg(msg, { icon: 2, time: 2000 });
        });

        // 添加到队列时
        FileUploader.on('fileQueued', function (file) {
            var fileItem = '<div class="file-item" id="' + file.id + '">' + '<div class="pull-left"><i class="file-icon file-icon-ext-' + file.ext + '"></i> ' + file.name + '</div>' + '<div class="pull-right"><i class="icon-remove" title="移除该文件"></i></div>' + '<div class="clearfix"></div>' + '</div>';
            $(WebUploaderOptions.pick.id).next().append(fileItem);
        });

        FileUploader.on('uploadBeforeSend', function (block, data, headers) {
            layer.load(2, {
                shade: [0.5, '#fff'] //0.1透明度的白色背景
            });
        })

        // 上传成功时
        FileUploader.on('uploadSuccess', function (file, response) {
            if (response) {
                attachments.push({
                    path: response.data.path,
                    name: response.data.name,
                    ext: response.data.ext
                });
            }
        });

        // 当所有文件上传结束时
        FileUploader.on('uploadFinished', function () {
            // 将附件数据插入到表单数据
            form_data.attachments = attachments;
            submitFormData(form_data);
        });

        // 删除队列文件
        $(document).on('click', '.uploader-attachment-queue .icon-remove', function () {
            var id = $(this).parent().parent().attr('id');
            // 删除队列中的文件
            FileUploader.removeFile(id, true);
            // 删除dom节点
            $(this).parent().parent().remove();
        });

    });
});